package com.jt.demo1.service;

import org.springframework.stereotype.Service;

@Service
public class UserServiceImpl implements UserService{
    /**
     * 业务：要求尽可能松耦合
     * 分析：
     *     1.UserService是业务处理类，其中addUser方法完成用户新增
     *     2.其中事务的代码与业务紧紧的耦合在一起
     *     3.如果事务的机制发生了变化，则所有的代码都将改变，耦合性高
     *        当前业务耦合性太高了！！！
     *     4.代码复用性太差
     *  动态代理
     *    使用代理机制，可以有效降低代码的耦合性，将公共的代码/重复的代码，写到代理机制中
     *  通过代理机制调用目标方法，使真实的业务被调用，降低业务的耦合性
     *
     *  AOP是用来解决业务层的耦合，在不修改原有代码的条件下对方法进行扩展；
     *     与IOC-DI不冲突
     *     核心思想：动态代理
     *
     * */

    /**
     * 代理的特点：使用代理对象和使用目标对象(UserService)，看起来一模一样
     * 动态代理分类
     *   1.JDK动态代理---接口！！
     *       1.jdk动态代理是jdl源码提供的，无需导入额外的jar包
     *       2.jdk代理对象要求实现和被代理者相同的接口，实现方法一
     *       3.jdk代理创建速度快，但是运行期慢
     *   2.CGLIB动态代理
     *       1.cglib动态代理需要导入的额外的jar包，才能使用，不是jdk源生的
     *       2.cglib要求被代理者有无接口都可以，但是cglib的代理对象要求是目标对象的子类(extends)
     *       3.cglib创建代理对象时慢，但是运行期速度 快
     * */


    @Override
    public void addUser() {
//        System.out.println("创建事务对象");
//        System.out.println("事务开始");
        System.out.println("新增用户成功！！！");
//        System.out.println("事务提交");
    }
}
